In most computing systems, low level instruction code is used as an intermediary between the hardware components of the computing system and the operating software and other high level software executing on the computing system. In some computer systems, this low level instruction code is known as the Basic Input and Output System (“BIOS”). The BIOS provides a set of software routines that allow high level software to interact with the hardware components of the computing system using standard calls.
Because of limitations of the BIOS in many PC-compatible computers, a new specification for creating the firmware that is responsible for booting the computer and for intermediating the communication between the operating system and the hardware has been created. The new specification is called the Extensible Firmware Interface (“EFI”) specification and is available from INTEL CORPORATION. The original EFI specification from INTEL CORPORATION is also being extended by the Unified Extensible Firmware Interface Forum (“UEFI”).
The EFI specification describes an interface between the operating system and the system firmware. In particular, the specifications defines the interface that platform firmware must implement and the interface that the operating system may use in booting. How the firmware implements the interface is left up to the manufacturer of the firmware. The EFI specification provides protocols for EFI drivers to communicate with each other, and the EFI core provides functions such as allocation of memory, creating events, setting the clock, and many others. This is accomplished through a formal and complete abstract specification of the software-visible interface presented to the operating system by the platform and the firmware.
In order to provide core functionality for providing user input and output in an EFI-based firmware, the EFI specification provides for a Human Interface Infrastructure (“HII”) protocol. The HII protocol provides a central access point for a HII database that stores all of the forms, character strings, and fonts utilized by drivers executing within the EFI environment. For instance, the HII protocol provides functionality for registering packages (also referred to herein as “packs”) containing forms, strings, and fonts, and for storing the contents of these packs in the HII database. The HII protocol also provides functions for retrieving information about the data contained in the HII database and the data itself. The HII protocol is specifically defined in the INTEL Platform Innovation Framework for EFI HII Specification, which is expressly incorporated herein by reference.
In order to add character strings to the HII database, a program must first build the string. Once the string is built, the program submits the string to the HII database. The character string is then stored by HII in the HII database. An integer token that uniquely identifies the string is also returned in response to the submission of the character string to the HII database. The token may be later used to reference the character string in the HII database.
In general, character strings may be built, submitted to the HII database, assigned a unique token by the HII protocol, and stored in the HII database, even though an identical character string has been previously submitted and stored in the HII database. In the event that these operations are performed for a character string that is identical to a string that has been previously stored in the HII database, these operations unnecessarily utilize processing capacity and a portion of the limited storage space of the HII database. It is with respect to these considerations and others that the various embodiments of the invention have been made.